package Day017_缓冲流_转换流_序列化流_打印流.demo4_序列流.Test4_注意事项;

import java.io.*;

/**
 * @author zhangyan
 * @date 2020/5/9 14:10
 */
/*
    反序列化操作注意:
        JVM反序列化对象时，需要能找到class文件，如果找不到就会报异常
        JVM反序列化对象时，能找到class文件，但是class文件在序列化对象之后发生了修改，那么反序列化操作也会失败，抛出一个 InvalidClassException 异常

    发生这个异常的原因如下：
        该类的序列版本号与从流中读取的类描述符的版本号不匹配
        该类包含未知数据类型
        该类没有可访问的无参数构造方法

     Serializable 接口给需要序列化的类，提供了一个序列版本号。 serialVersionUID 该版本号的目的在于验证序列化的对象和对应类是否版本匹配

     解决办法: 给一个固定的版本号
 */

public class 序列流注意事项 {
    public static void main(String[] args) throws Exception {
        //创建序列化流,关联目的地文件路径
        FileOutputStream fos = new FileOutputStream("Demo02\\aaa\\a.txt");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        //创建对象
        Student s = new Student("张三", 18);
        //写出对象
        oos.writeObject(s);
        //关流
        oos.close();

        //创建反序列流,关联数据源文件路径
        FileInputStream fis = new FileInputStream("Demo02\\aaa\\a.txt");
        ObjectInputStream ois = new ObjectInputStream(fis);
        //读取对象
        Student s1 = (Student) ois.readObject();
        //关流
        ois.close();
        //打印对象
        System.out.println(s1);
    }
}
